  const mbs = {
    name: '麻不烧',
    say(prefix, age) {
      console.log(`${prefix},my name is ${this.name},i am ${age} year old`)
    },
  }

  mbs.say('你踏马得', 99)

  const SMHZ = {
    name: '司马亨兹',
  }

  mbs.say.call(SMHZ, '叭叭牛号', 18)

  // call 原理
  // 参数一：指定到某一个具体的实例上
  // 参数余：可传参数
  // 可以接受任意多个参数，但是要求，第一个参数必须是待被指向的对象，剩下的参数，都传入借过来使用的函数中

  Function.prototype.myCall = function (target, ...args) {
    target = target || window
    // 首先  A.myCall 的时候 this指向的是 A, this.targetMode 指向的是 A里面的targetMode
    // 如何让里面的targetMode 指向B里面的
    // 确保唯一
    const symboKey = Symbol()
    // 保存当前的this(this是个方法) 绑定到指定的对象中
    console.log('this ==> ', this)
    target[symboKey] = this
    // 在 target 里面调用者这个方法 this就指向了 target
    target[symboKey](...args)
    // 用完后删除
    delete target[symboKey]
  }

  mbs.say.myCall(SMHZ, '叭叭牛号', 18)
